package com.codewsq.java;

import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 类加载器
 *
 * @author codewsq
 * @date 2021/7/18 0018 18:20
 */
public class ClassloaderTest {

    @Test
    public void test() {
        // Classloader是我们的自定义类调用自定义类的类加载器,类加载器 为 <系统类加载器>
        ClassLoader classLoader = ClassloaderTest.class.getClassLoader();
        System.out.println(classLoader); // sun.misc.Launcher$AppClassLoader@18b4aac2

        // 调用系统类加载器的 getParent() 方法，可以获取 <扩展类加载器>
        ClassLoader parent = classLoader.getParent();
        System.out.println(parent);

        // 使用<扩展类加载器>再次调用getParent()方法，发现返回为null
        // 因为此时在往上就是 <引导类加载器了>
        // 只不过<引导类加载器>主要负责加载java的核心类库，所以无法获取<引导类加载器>
        // <引导类加载器>也无法加载自定义类
        ClassLoader parent1 = parent.getParent();
        System.out.println(parent1); // null

        // 如下可知，String为java的核心类库中的类，所以这里无法获取它的类加载器，也就是 引导类加载器
        ClassLoader stringClassloader = String.class.getClassLoader();
        System.out.println(stringClassloader); // null
    }


    /*
     *
     * 读取properties文件
     *
     * */
    @Test
    public void test2() {
        Properties properties = new Properties();
        // 方式一
        // 这种方式默认读取配置文件的路径是在当前module下
        /*FileInputStream fis = null;
        try {
            fis = new FileInputStream("jdbc.properties");
            properties.load(fis);
            String username = properties.getProperty("username");
            System.out.println(username);
            String password = properties.getProperty("password");
            System.out.println(password);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                }
            }
        }*/


        // 方式二：使用ClassLoader加载
        // 默认识别路径为 当前module的src下
        ClassLoader classLoader = ClassloaderTest.class.getClassLoader();
        InputStream ras = classLoader.getResourceAsStream("jdbc1.properties");
        try {
            properties.load(ras);
        } catch (IOException e) {
            e.printStackTrace();
        }
        String username = properties.getProperty("username");
        System.out.println(username);
        String password = properties.getProperty("password");
        System.out.println(password);

    }

}


